home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML Instance.sea / XML Instance / Required / ldapjdk.jar / LDAPModify.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-04-13  |  8.4 KB  |  380 lines

  1. import java.io.File;
  2. import java.io.FileInputStream;
  3. import java.io.FileNotFoundException;
  4. import java.io.FileOutputStream;
  5. import java.io.IOException;
  6. import java.io.PrintWriter;
  7. import java.util.Enumeration;
  8. import java.util.Vector;
  9. import netscape.ldap.LDAPAttribute;
  10. import netscape.ldap.LDAPAttributeSet;
  11. import netscape.ldap.LDAPConnection;
  12. import netscape.ldap.LDAPControl;
  13. import netscape.ldap.LDAPEntry;
  14. import netscape.ldap.LDAPException;
  15. import netscape.ldap.LDAPModification;
  16. import netscape.ldap.LDAPModificationSet;
  17. import netscape.ldap.LDAPSearchConstraints;
  18. import netscape.ldap.util.GetOpt;
  19. import netscape.ldap.util.LDIF;
  20. import netscape.ldap.util.LDIFAddContent;
  21. import netscape.ldap.util.LDIFAttributeContent;
  22. import netscape.ldap.util.LDIFContent;
  23. import netscape.ldap.util.LDIFDeleteContent;
  24. import netscape.ldap.util.LDIFModDNContent;
  25. import netscape.ldap.util.LDIFModifyContent;
  26. import netscape.ldap.util.LDIFRecord;
  27.  
  28. public class LDAPModify extends LDAPTool {
  29.    private static boolean m_continuous;
  30.    private static boolean m_force;
  31.    private static boolean m_add;
  32.    private static boolean m_binaryFiles;
  33.    private static String m_rejectsFile = null;
  34.    private static LDIF m_ldif = null;
  35.    private static String m_file = null;
  36.  
  37.    public static void main(String[] var0) {
  38.       extractParameters(var0);
  39.  
  40.       try {
  41.          if (!LDAPTool.m_justShow) {
  42.             LDAPTool.m_client = new LDAPConnection();
  43.             LDAPTool.m_client.connect(LDAPTool.m_ldaphost, LDAPTool.m_ldapport);
  44.          }
  45.       } catch (Exception var5) {
  46.          System.err.println("Error: client connection failed!");
  47.          System.exit(0);
  48.       }
  49.  
  50.       try {
  51.          if (!LDAPTool.m_justShow) {
  52.             LDAPTool.m_client.authenticate(LDAPTool.m_version, LDAPTool.m_binddn, LDAPTool.m_passwd);
  53.          }
  54.       } catch (Exception var4) {
  55.          System.err.println(((Throwable)var4).toString());
  56.          System.exit(0);
  57.       }
  58.  
  59.       try {
  60.          if (m_file != null) {
  61.             m_ldif = new LDIF(m_file);
  62.          } else {
  63.             m_ldif = new LDIF();
  64.          }
  65.       } catch (Exception var6) {
  66.          if (m_file == null) {
  67.             m_file = "stdin";
  68.          }
  69.  
  70.          System.err.println("Failed to read LDIF file " + m_file + ", " + ((Throwable)var6).toString());
  71.          System.exit(0);
  72.       }
  73.  
  74.       try {
  75.          doModify();
  76.       } catch (Exception var3) {
  77.          System.err.println(((Throwable)var3).toString());
  78.       }
  79.  
  80.       try {
  81.          if (!LDAPTool.m_justShow) {
  82.             LDAPTool.m_client.disconnect();
  83.          }
  84.       } catch (Exception var2) {
  85.          System.err.println(((Throwable)var2).toString());
  86.       }
  87.  
  88.       System.exit(0);
  89.    }
  90.  
  91.    private static void doUsage() {
  92.       System.err.println("usage: LDAPModify [options]");
  93.       System.err.println("options");
  94.       System.err.println("  -h host       LDAP server name or IP address");
  95.       System.err.println("  -p port       LDAP server TCP port number");
  96.       System.err.println("  -V version    LDAP protocol version number (default is 3)");
  97.       System.err.println("  -D binddn     bind dn");
  98.       System.err.println("  -w password   bind passwd (for simple authentication)");
  99.       System.err.println("  -d level      set LDAP debugging level to 'level'");
  100.       System.err.println("  -R            do not automatically follow referrals");
  101.       System.err.println("  -O hop limit  maximum number of referral hops to traverse");
  102.       System.err.println("  -H            display usage information");
  103.       System.err.println("  -c            continuous mode (do not stop on errors)");
  104.       System.err.println("  -M            manage references (treat them as regular entries)");
  105.       System.err.println("  -f file       read modifications from file instead of standard input");
  106.       System.err.println("  -a            add entries");
  107.       System.err.println("  -b            read values that start with / from files (for bin attrs)");
  108.       System.err.println("  -n            show what would be done but don't actually do it");
  109.       System.err.println("  -v            run in verbose mode");
  110.       System.err.println("  -r            replace existing values by default");
  111.       System.err.println("  -e rejectfile save rejected entries in 'rejfile'");
  112.       System.err.println("  -y proxy-DN   DN to use for access control");
  113.    }
  114.  
  115.    protected static void extractParameters(String[] var0) {
  116.       GetOpt var1 = LDAPTool.extractParameters("abcHFre:f:", var0);
  117.       if (var1.hasOption('H')) {
  118.          doUsage();
  119.          System.exit(0);
  120.       }
  121.  
  122.       if (var1.hasOption('F')) {
  123.          m_force = true;
  124.       }
  125.  
  126.       if (var1.hasOption('a')) {
  127.          m_add = true;
  128.       }
  129.  
  130.       if (var1.hasOption('c')) {
  131.          m_continuous = true;
  132.       }
  133.  
  134.       if (var1.hasOption('r')) {
  135.          m_add = false;
  136.       }
  137.  
  138.       if (var1.hasOption('b')) {
  139.          m_binaryFiles = true;
  140.       }
  141.  
  142.       if (var1.hasOption('f')) {
  143.          m_file = var1.getOptionParam('f');
  144.       }
  145.  
  146.       if (var1.hasOption('e')) {
  147.          m_rejectsFile = var1.getOptionParam('e');
  148.       }
  149.  
  150.    }
  151.  
  152.    private static void doModify() throws IOException {
  153.       PrintWriter var0 = null;
  154.       LDAPSearchConstraints var1 = null;
  155.       if (!LDAPTool.m_justShow) {
  156.          var1 = (LDAPSearchConstraints)LDAPTool.m_client.getSearchConstraints().clone();
  157.          Vector var2 = new Vector();
  158.          if (LDAPTool.m_proxyControl != null) {
  159.             var2.addElement(LDAPTool.m_proxyControl);
  160.          }
  161.  
  162.          if (LDAPTool.m_ordinary) {
  163.             var2.addElement(new LDAPControl("2.16.840.1.113730.3.4.2", true, (byte[])null));
  164.          }
  165.  
  166.          if (var2.size() > 0) {
  167.             LDAPControl[] var3 = new LDAPControl[var2.size()];
  168.             var2.copyInto(var3);
  169.             var1.setServerControls(var3);
  170.          }
  171.  
  172.          var1.setReferrals(LDAPTool.m_referrals);
  173.          if (LDAPTool.m_referrals) {
  174.             LDAPTool.setDefaultReferralCredentials(var1);
  175.          }
  176.  
  177.          var1.setHopLimit(LDAPTool.m_hopLimit);
  178.       }
  179.  
  180.       for(LDIFRecord var16 = m_ldif.nextRecord(); var16 != null; var16 = m_ldif.nextRecord()) {
  181.          LDIFContent var17 = var16.getContent();
  182.          LDAPModification[] var4 = null;
  183.          LDAPAttribute[] var5 = null;
  184.          boolean var6 = false;
  185.          boolean var7 = false;
  186.          LDAPEntry var8 = null;
  187.          if (var17 instanceof LDIFModifyContent) {
  188.             var4 = ((LDIFModifyContent)var17).getModifications();
  189.          } else if (var17 instanceof LDIFAddContent) {
  190.             var5 = ((LDIFAddContent)var17).getAttributes();
  191.          } else if (var17 instanceof LDIFAttributeContent) {
  192.             if (m_add) {
  193.                var5 = ((LDIFAttributeContent)var17).getAttributes();
  194.             } else {
  195.                LDAPAttribute[] var9 = ((LDIFAttributeContent)var17).getAttributes();
  196.                var4 = new LDAPModification[var9.length];
  197.  
  198.                for(int var10 = 0; var10 < var9.length; ++var10) {
  199.                   var4[var10] = new LDAPModification(2, var9[var10]);
  200.                }
  201.             }
  202.          } else if (var17 instanceof LDIFDeleteContent) {
  203.             var6 = true;
  204.          } else if (var17 instanceof LDIFModDNContent) {
  205.             var7 = true;
  206.          }
  207.  
  208.          if (var5 != null) {
  209.             LDAPAttributeSet var18 = new LDAPAttributeSet();
  210.  
  211.             for(int var20 = 0; var20 < var5.length; ++var20) {
  212.                var18.add(var5[var20]);
  213.             }
  214.  
  215.             var8 = new LDAPEntry(var16.getDN(), var18);
  216.          }
  217.  
  218.          boolean var19 = false;
  219.          if (m_binaryFiles) {
  220.             if (var4 != null) {
  221.                for(int var22 = 0; var22 < var4.length; ++var22) {
  222.                   LDAPModification var24 = var4[var22];
  223.                   LDAPAttribute var29 = var4[var22].getAttribute();
  224.                   LDAPAttribute var32 = checkFiles(var29);
  225.                   if (var32 == null) {
  226.                      var19 = true;
  227.                   } else {
  228.                      var4[var22] = new LDAPModification(var24.getOp(), var32);
  229.                   }
  230.                }
  231.             } else if (var5 != null) {
  232.                LDAPAttributeSet var21 = new LDAPAttributeSet();
  233.  
  234.                for(int var11 = 0; var11 < var5.length; ++var11) {
  235.                   LDAPAttribute var12 = var5[var11];
  236.                   LDAPAttribute var13 = checkFiles(var12);
  237.                   if (var13 == null) {
  238.                      var19 = true;
  239.                      break;
  240.                   }
  241.  
  242.                   var21.add(var13);
  243.                }
  244.  
  245.                if (!var19) {
  246.                   var8 = new LDAPEntry(var16.getDN(), var21);
  247.                }
  248.             }
  249.          }
  250.  
  251.          int var23 = 0;
  252.          if (!var19) {
  253.             try {
  254.                if (var4 != null) {
  255.                   LDAPModificationSet var27 = new LDAPModificationSet();
  256.                   System.out.println("\nmodifying entry " + var16.getDN());
  257.  
  258.                   for(int var31 = 0; var31 < var4.length; ++var31) {
  259.                      if (LDAPTool.m_verbose) {
  260.                         System.out.println("\t" + var4[var31]);
  261.                      }
  262.  
  263.                      var27.add(var4[var31].getOp(), var4[var31].getAttribute());
  264.                   }
  265.  
  266.                   if (!LDAPTool.m_justShow) {
  267.                      LDAPTool.m_client.modify(var16.getDN(), var27, var1);
  268.                   }
  269.                } else if (var8 == null) {
  270.                   if (var6) {
  271.                      System.out.println("\ndeleting entry " + var16.getDN());
  272.                      if (!LDAPTool.m_justShow) {
  273.                         LDAPTool.m_client.delete(var16.getDN(), var1);
  274.                      }
  275.                   } else if (var7) {
  276.                      System.out.println("\nmodifying RDN of entry " + var16.getDN() + " and/or moving it beneath a new parent");
  277.                      if (LDAPTool.m_verbose) {
  278.                         System.out.println("\t" + var17.toString());
  279.                      }
  280.  
  281.                      if (!LDAPTool.m_justShow) {
  282.                         LDIFModDNContent var26 = (LDIFModDNContent)var17;
  283.                         LDAPTool.m_client.rename(var16.getDN(), var26.getRDN(), var26.getNewParent(), var26.getDeleteOldRDN(), var1);
  284.                         System.out.println("rename completed");
  285.                      }
  286.                   }
  287.                } else {
  288.                   System.out.println("\nadding new entry " + var8.getDN());
  289.                   if (LDAPTool.m_verbose) {
  290.                      LDAPAttributeSet var25 = var8.getAttributeSet();
  291.  
  292.                      for(int var30 = 0; var30 < var25.size(); ++var30) {
  293.                         System.out.println("\t" + var25.elementAt(var30));
  294.                      }
  295.                   }
  296.  
  297.                   if (!LDAPTool.m_justShow) {
  298.                      LDAPTool.m_client.add(var8, var1);
  299.                   }
  300.                }
  301.             } catch (LDAPException var15) {
  302.                System.err.println(var16.getDN() + ": " + var15.errorCodeToString());
  303.                if (var15.getLDAPErrorMessage() != null) {
  304.                   System.err.println("additional info: " + var15.getLDAPErrorMessage());
  305.                }
  306.  
  307.                if (!m_continuous) {
  308.                   System.exit(1);
  309.                }
  310.  
  311.                var19 = true;
  312.                var23 = var15.getLDAPResultCode();
  313.             }
  314.          }
  315.  
  316.          if (var19 && m_rejectsFile != null) {
  317.             try {
  318.                if (var0 == null) {
  319.                   var0 = new PrintWriter(new FileOutputStream(m_rejectsFile));
  320.                }
  321.             } catch (Exception var14) {
  322.             }
  323.  
  324.             if (var0 != null) {
  325.                var0.println("dn: " + var16.getDN() + " # Error: " + var23);
  326.                if (var4 != null) {
  327.                   for(int var28 = 0; var28 < var4.length; ++var28) {
  328.                      var0.println(var4[var28].toString());
  329.                   }
  330.                } else if (var8 != null) {
  331.                   var0.println("Add " + var8.toString());
  332.                } else if (var6) {
  333.                   var0.println("Delete " + var16.getDN());
  334.                } else if (var7) {
  335.                   var0.println("ModDN " + ((LDIFModDNContent)var17).toString());
  336.                }
  337.  
  338.                var0.flush();
  339.             }
  340.          }
  341.       }
  342.  
  343.       System.exit(0);
  344.    }
  345.  
  346.    private static LDAPAttribute checkFiles(LDAPAttribute var0) {
  347.       LDAPAttribute var1 = new LDAPAttribute(var0.getName());
  348.       Enumeration var2 = var0.getStringValues();
  349.       if (var2 == null) {
  350.          System.err.println("Failed to do string conversion for " + var0.getName());
  351.       } else {
  352.          while(var2.hasMoreElements()) {
  353.             String var3 = (String)var2.nextElement();
  354.             if (var3 != null && var3.length() > 1) {
  355.                try {
  356.                   File var4 = new File(var3);
  357.                   FileInputStream var5 = new FileInputStream(var4);
  358.                   byte[] var6 = new byte[(int)var4.length()];
  359.                   var5.read(var6, 0, (int)var4.length());
  360.                   var1.addValue(var6);
  361.                } catch (FileNotFoundException var7) {
  362.                   var1.addValue(var3);
  363.                } catch (IOException var8) {
  364.                   System.err.println("Unable to read value from file " + var3);
  365.                   if (!m_continuous) {
  366.                      System.exit(1);
  367.                   }
  368.  
  369.                   var1 = null;
  370.                }
  371.             } else {
  372.                var1.addValue(var3);
  373.             }
  374.          }
  375.       }
  376.  
  377.       return var1;
  378.    }
  379. }
  380.